import allure

from src.api.base_api import BaseApi
from src.utils.data_model import data_model_list
from src.utils.get_today_time import get_today_local_time


class Achievement(BaseApi):
    def __init__(self, base_url):
        super().__init__(base_url)

    @allure.step('获取绩效管理页面的数据列表')
    def user_list(self, platform='dy',**kwargs):
        '''
        获取绩效管理页面-达人业绩的数据列表
        url：https://ck-medium-api-test.cds8.cn/v1/achievement_v2/user/overview
        get
        默认是当天的数据，抖音
        参数：
        achievement_type：1表示达人业绩，2表示团长业绩 0表示总业绩
        '''
        params = {
            'platform': platform,
        }
        for k, v in kwargs.items():
            params[k] = v

        params_model = data_model_list.model_validate(params)

        # params_model = data_model_list(**params)

        params = params_model.model_dump()

        res_json = self.send(method='get', path='achievement_v2/user/overview', params=params)

        return res_json

    @allure.step('部门-新版部门绩效概览')
    def dept_list(self, platform='dy', start_date=get_today_local_time(), end_date=get_today_local_time(),
                  achievement_type=0):
        '''
        获取绩效管理页面-部门-新版部门绩效概览列表
        url：https://ck-medium-api-test.cds8.cn/v1/achievement_v2/dept/overview
        get
        默认是当天的数据，抖音
        参数：
        achievement_type：1表示达人业绩，2表示团长业绩 0表示总业绩
        '''
        params = {
            'platform': platform,
            'start_date': start_date,
            'end_date': end_date,
            'achievement_type': achievement_type
        }
        res_json = self.send(method='get', path='achievement_v2/dept/overview', params=params)
        return res_json

    @allure.step('媒介绩效页(全部)')
    def user(self, platform="dy", start_date=get_today_local_time(), end_date=get_today_local_time(),
             sort="sales", order_by="desc", increase_type=1):
        """
        url: https://ck-medium-api-test.cds8.cn/v1/achievement/user
        get
        默认是当天的数据 全平台
        参数：
        platform: 平台 all：全部
        sort: 排序字段 gmv:销售额 volume:销量 ；refund_amount：退款金额；commission：达人佣金；bind_author_count：建联达人；cooperate_author_count：合作达人；order_author_count：出单达人；sample_count：领样申请数；goods_count：推广商品数；cooperate_percent：合作成功率；close_service_amount:结算服务费;actual_amount:实际付销售额
        order_by: desc:降序 asc:升序
        increase_type: 1上升,2下降
        """
        params = {
            "platform": platform,
            "start_date": start_date,
            "end_date": end_date,
            "sort": sort,
            "order_by": order_by,
            "increase_type": increase_type
        }
        res_json = self.send(method='get', path='achievement/user', params=params)
        return res_json

    @allure.step('媒介绩效-图表')
    def user_chart(self, platform="dy", start_date=get_today_local_time(), end_date=get_today_local_time(),
                   sort="sales", order_by="desc", increase_type=1):
        """
        url: https://ck-medium-api-test.cds8.cn/v1/achievement/user/chart
        get
        默认是当天的数据 dy平台
        参数：
        platform: 平台 all：全部
        sort: 排序字段 gmv:销售额 volume:销量 ；refund_amount：退款金额；commission：达人佣金；bind_author_count：建联达人；cooperate_author_count：合作达人；order_author_count：出单达人；sample_count：领样申请数；goods_count：推广商品数；cooperate_percent：合作成功率；close_service_amount:结算服务费;actual_amount:实际付销售额
        order_by: desc:降序 asc:升序
        increase_type: 1上升,2下降
        """
        params = {
            "platform": platform,
            "start_date": start_date,
            "end_date": end_date,
            "sort": sort,
            "order_by": order_by,
            "increase_type": increase_type
        }
        res_json = self.send(method='get', path='achievement/user/chart', params=params)
        return res_json

    @allure.step('员工-新版员工绩效概览散点图')
    def v2_user_chart(self, platform="dy", start_date=get_today_local_time(), end_date=get_today_local_time(),
                      achievement_type=1, increase_type=1, chart_field="pay_sales"):
        """
        url: https://ck-medium-api-test.cds8.cn/v1/achievement_v2/user/chart
        get
        默认是当天的数据 dy平台
        参数：
        platform: 平台 all：全部
        start_date: 开始时间
        end_date: 结束时间
        achievement_type: 业绩类型 1达人业绩 2团长业绩
        increase_type: 增长趋势 1只看增长 2只看下降
        chart_field: 指定查询字段7个 pay_sales(成交金额)、new_author_sales（新达人出单金额）、connect_author_count（建联达人数）,order_author_count（出单达人数）,sample_author_count（寄样达人数）,refund_sales（退款金额）,close_sales（结算金额）
        """
        params = {
            "platform": platform,
            "start_date": start_date,
            "end_date": end_date,
            "achievement_type": achievement_type,
            "increase_type": increase_type,
            "chart_field": chart_field
        }
        res_json = self.send(method='get', path='achievement_v2/user/chart', params=params)
        return res_json

    @allure.step('员工-新版员工绩效列表')
    def v2_user(self, platform="all", start_date=get_today_local_time(), end_date=get_today_local_time(),
                achievement_type=1, increase_type=1, achievement_target=1, content_type=-1):
        """
        url: https://ck-medium-api-test.cds8.cn/v1/achievement_v2/user
        get
        默认是当天的数据 dy平台
        参数：
        platform: 平台 all：全部
        start_date: 开始时间
        end_date: 结束时间
        achievement_type: 业绩类型 1达人业绩 2团长业绩
        increase_type: 增长趋势 1只看增长 2只看下降
        achievement_target: # 指标类型 1交易指标 2内容指标 3达人指标 4寄样指标
        content_type: # 交易指标渠道 -1 全部 0商品卡 1视频 2直播  默认 -1
        """
        params = {
            "platform": platform,
            "dept_id": "",
            "user_id": "",
            "start_date": start_date,
            "end_date": end_date,
            "achievement_type": achievement_type,
            "increase_type": increase_type,
            "shop_id": "",
            "product_id": "",
            "hire_start_date": 0,
            "hire_end_date": 0,
            "status": 0,
            "achievement_target": achievement_target,  # 指标类型 1交易指标 2内容指标 3达人指标 4寄样指标
            "content_type": content_type,  # 交易指标渠道 -1 全部 0商品卡 1视频 2直播  默认 -1
            "page": 1,
            "size": 10,
            "order_by": "desc",
            "sort": "pay_sales"
        }
        res_json = self.send(method='get', path='achievement_v2/user', params=params)
        return res_json
